/*
 * @Author: OBKoro1
 * @Date: 2025-09-16 09:28:21
 * @LastEditTime: 2025-09-16 09:40:51
 * @FilePath: \Gating\main\reset.c
 * @Description:
 *
 * Copyright (c) 2025 by ${git_name_email}, All Rights Reserved.
 */

#include "reset.h"

static const char *RESET_TAG = "RESET";

static int64_t start_time = 0;
void boot_input(void) {
    gpio_config_t io_conf = {
        .intr_type = GPIO_INTR_DISABLE,       // 禁用中断
        .mode = GPIO_MODE_INPUT,             // 设置为输出模式
        .pin_bit_mask = (1 << POWER_KEY_GPIO),  // 要配置的GPIO引脚位掩码(1ULL<<GPIO_OUTPUT_IO_0)
        //.pull_down_en = GPIO_PULLDOWN_DISABLE,// 禁用下拉电阻
        // .pull_up_en = GPIO_PULLUP_ENABLE     // 禁用上拉电阻
    };

    gpio_config(&io_conf); // 应用配置
}
/**
 * @description: 检查电源键是否有电信号输入
 */
static bool is_power_key_long_pressed(void)
{
    start_time = esp_timer_get_time();
    ESP_LOGI(RESET_TAG, "检测到按键按下，等待释放...");

    // 等待按键释放或超时
    while (1)
    {   if(gpio_get_level(POWER_KEY_GPIO) == 0) {
            if ((esp_timer_get_time() - start_time) >= LONG_PRESS_TIME)
            {
                ESP_LOGI(RESET_TAG, "长按确认");
                return true;
            }else {
                ESP_LOGI(RESET_TAG, "短按释放");
                return false;
            }
        }
        vTaskDelay(10 / portTICK_PERIOD_MS); // 避免忙等待
    }
}

/**
 * @description: 检查并处理长按电源键事件
 */
void check_power_key_reset(void)
{
    if (is_power_key_long_pressed())
    {
        ESP_LOGI(RESET_TAG, "执行NVS初始化和Wi-Fi配置清除");
        esp_err_t err = nvs_flash_erase();
            if (err == ESP_OK) {
                printf("NVS数据已成功清空！\n");
                // 重新初始化NVS
                err = nvs_flash_init();
                if (err != ESP_OK) {
                    printf("NVS重新初始化失败: %s\n", esp_err_to_name(err));
                }
            } else {
                printf("清空NVS失败: %s\n", esp_err_to_name(err));
            }
        ESP_LOGI(RESET_TAG, "操作完成，重启设备");
        esp_restart(); // 重启设备以应用更改
    }
}